/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.edu.eam.clinica.logica.bo;

import co.edu.eam.persitencia.dao.Interfaz.IDAOPaciente;
import co.edu.eam.persitencia.dao.implementacion.DAOPaciente;
import co.edu.eam.persitencia.entidades.Acudiente;
import co.edu.eam.persitencia.entidades.Paciente;
import co.edu.eam.persitencia.utilidades.FactoryEntityManager;
import java.util.List;
import javax.persistence.EntityManager;

/**
 *
 * @author wilmar adm
 */
public class BOPaciente {
    
    
     static EntityManager fabrica = FactoryEntityManager.getEm();
    IDAOPaciente ipaciente;
    
     public BOPaciente() {
        ipaciente= new DAOPaciente(fabrica);
    }
     
     /////////////////////////CRUD PACIENTE////////////////////////////
   /**
    * busca un paciente
    * @param documento
    * @return
    * @throws Exception 
    */
    public Paciente buscarPaciente(String documento) throws Exception {
       
         return ipaciente.buscarPaciente(documento);
    }
    
    
     public void crearPaciente(Paciente paciente) throws Exception {
        
         if(buscarPaciente(paciente.getDocumento())==null){
             
             ipaciente.crearPaciente(paciente);
         }else{
            throw  new Exception("EL PACIENTE YA EXISTE");
         }  
         }
         
     
      public void editarPaciente(Paciente paciente) throws Exception {
       
          if(buscarPaciente(paciente.getDocumento())==null){
             ipaciente.editarPaciente(paciente);
            }else{
            throw  new Exception("EL PACIENTE YA EXISTE");
         } 
          
    }
      
      
      public void eliminarPaciente(Paciente paciente) throws  Exception{
          
          if(buscarPaciente(paciente.getDocumento())==null){
             
             ipaciente.eliminarPaciente(paciente);
         }else{
            throw  new Exception("EL PACIENTE YA EXISTE");
         }
          
          }
    //////////////////////////////////////////////////////////////////
      
    public Acudiente buscarAcudiente (String documento) throws Exception{
        
        return ipaciente.buscarAcudiente(documento);
    }
    
    
    public void agregarAcudientePaciente(Acudiente acu, Paciente pe) throws Exception{
        
        if(buscarPaciente(pe.getDocumento())!=null){
            
            ipaciente.agregarAcudientePaciente(acu, pe);
        }else{
            
            throw  new Exception("EL PACIENTE NO EXISTE");
        }
        
    }
    
    
     public void quitarAcudienteDePaciente (Acudiente a, Paciente p) throws Exception{
        
         
         if(buscarPaciente(p.getDocumento())!= null){
             
             if(buscarAcudiente(a.getDocumento())!=null){
                 
                 ipaciente.quitarAcudientePaciente(a, p);
             }else{
                throw  new Exception("EL ACUDIENTE NO EXISTE"); 
             }
         }else{
             throw  new Exception("EL PACIENTE NO EXISTE");
         }  
             
       }
     
     public void editarAcudienteDePaciente(Acudiente as, Paciente d) throws Exception{

         
         if(buscarPaciente(d.getDocumento())!=null){
             
                      
         List<Acudiente> k=d.getAcudientes();
         
             for (Acudiente acu1 : k) {
                  if (acu1.getDocumento()==as.getDocumento()) {
                     
                      ipaciente.editarAcudienteDePaciente(as, d);
                 }else{
                      
                       throw  new Exception("EL PACIENTE NO TIENE ESE ACUDIENTE");
                  }
                 
             }
             
         }else{
              throw  new Exception("EL PACIENTE NO EXISTE");
             
         }
         
     }
     
     
     public List<Paciente> listarTodosPacientes() throws Exception{
         
         return ipaciente.listarTodosLosPacientes();
     }
     
     public List<Acudiente> listarAcudientesPorPaciente(Paciente p) throws Exception{
         
        return ipaciente.listarAcudientePorPaciente(p);
     }
      
}
